package com.ruoyi.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.dto.FavoriteAddDTO;
import com.ruoyi.system.dto.FavoriteQueryDTO;
import com.ruoyi.system.entity.AfterSaleMaintenanceDO;
import com.ruoyi.system.entity.FavoriteDO;
import com.ruoyi.system.vo.FavoriteVO;

import java.util.List;

/**
 * 收藏服务接口
 * 
 * @author ruoyi
 * @since 2024-01-01
 */
public interface IFavoriteService extends IService<FavoriteDO> {

    /**
     * 添加收藏
     * 
     * @param userId 用户ID
     * @param favoriteAddDTO 收藏信息
     * @return 是否成功
     */
    boolean addFavorite(Long userId, FavoriteAddDTO favoriteAddDTO);

    /**
     * 取消收藏
     * 
     * @param userId 用户ID
     * @param businessType 业务类型
     * @param businessId 业务ID
     * @return 是否成功
     */
    boolean removeFavorite(Long userId, String businessType, Long businessId);

    /**
     * 查询用户收藏列表
     * 
     * @param queryDTO 查询条件
     * @return 收藏列表
     */
    List<FavoriteVO> getUserFavorites(FavoriteQueryDTO queryDTO);

    /**
     * 检查用户是否已收藏指定业务
     * 
     * @param userId 用户ID
     * @param businessType 业务类型
     * @param businessId 业务ID
     * @return 是否已收藏
     */
    boolean isFavorited(Long userId, String businessType, Long businessId);

    /**
     * 批量检查用户收藏状态
     * 
     * @param userId 用户ID
     * @param businessType 业务类型
     * @param businessIds 业务ID列表
     * @return 已收藏的业务ID列表
     */
    List<Long> getFavoritedBusinessIds(Long userId, String businessType, List<Long> businessIds);

    /**
     * 获取业务收藏数量
     * 
     * @param businessType 业务类型
     * @param businessId 业务ID
     * @return 收藏数量
     */
    int getFavoriteCount(String businessType, Long businessId);
}
